[BLKTAP] fix sysfs cleanup on error case
authorJake Wires <jwires@xensource.com>
Thu, 22 Feb 2007 02:38:11 +0000 (18:38 -0800)
committerJake Wires <jwires@xensource.com>
Thu, 22 Feb 2007 02:38:11 +0000 (18:38 -0800)
Signed-off-by: Jake Wires <jwires@xensource.com>
linux-2.6-xen-sparse/drivers/xen/blktap/xenbus.c

index 14a8dd404161df6dec5bcbc1dc48d589854611bd..1b4bda2184ab5317bd4c3cf0fd4edfd77c701c00 100644 (file)
@@ -47,6 +47,7 @@ struct backend_info
        blkif_t *blkif;
        struct xenbus_watch backend_watch;
        int xenbus_id;
+       int group_added;
 };
 
 
@@ -150,7 +151,12 @@ static struct attribute_group tapstat_group = {
 
 int xentap_sysfs_addif(struct xenbus_device *dev)
 {
-       return sysfs_create_group(&dev->dev.kobj, &tapstat_group);
+       int err;
+       struct backend_info *be = dev->dev.driver_data;
+       err = sysfs_create_group(&dev->dev.kobj, &tapstat_group);
+       if (!err)
+               be->group_added = 1;
+       return err;
 }
 
 void xentap_sysfs_delif(struct xenbus_device *dev)
@@ -174,7 +180,8 @@ static int blktap_remove(struct xenbus_device *dev)
                tap_blkif_free(be->blkif);
                be->blkif = NULL;
        }
-       xentap_sysfs_delif(be->dev);
+       if (be->group_added)
+               xentap_sysfs_delif(be->dev);
        kfree(be);
        dev->dev.driver_data = NULL;
        return 0;